{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f7365bee",
   "metadata": {},
   "source": [
    "# 在前面学习到的各种方法都是组件，现在要将这些组件全部整合到一起，这个样子就可以合成YOLO算法"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "37d1aaaf",
   "metadata": {},
   "source": [
    "## 1.1 首先定义的训练集"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7eeadbd2",
   "metadata": {},
   "source": [
    "<img src=\"./picture/yolo1.png\" alt=\"Drawing\" style=\"width: 500px;\" align=\"left\"/>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "26c618d1",
   "metadata": {},
   "source": [
    "上面的这种图片展示了如何构建出你的训练集的：\n",
    "\n",
    "1.首先是将这张照片划分了3 * 3。然后要检测出3个目标，其中红色框是已经标记好的检测对象。\n",
    "\n",
    "2.红色框的中心点很明显是在绿色的框内，所以接下俩都是对这个绿色的框进行操作。首先可以看到上面的 \n",
    "照片含有两个紫色的框（1和2），这个就是前面提及到的要是一个格子中包含了两个检测对象要使用的Anchor Boxes。\n",
    "这里可以发现2号的Anchor Boxes是与红色框的交并比更加大的，所以会将下面的相关联（这里1可以看做是行人，2可以看做是汽车）所以最后输出的第三个向量。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25c3d997",
   "metadata": {},
   "source": [
    "## 2.如何对图像做出预测的"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5d75b19d",
   "metadata": {},
   "source": [
    "<img src=\"./picture/yolo2.png\" alt=\"Drawing\" style=\"width: 500px;\" align=\"left\"/>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f4d954d",
   "metadata": {},
   "source": [
    "这里是对结果进行预测的：\n",
    "\n",
    "1.对于蓝色的框，也就是左上角的方格，这里没有任何有用的东西，所以最终的输出值是一些无关紧要的噪声\n",
    "\n",
    "2.对于绿色的框，很明显有一辆汽车，这个时候使用上面的Anchor boxes 最终输出的是下面的，其中$b_x,b_y,b_h.b_w$就是这个图像位置的基本信息。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e92e0708",
   "metadata": {},
   "source": [
    "## 1.3 运行非最大值抑制。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4fe0541a",
   "metadata": {},
   "source": [
    " <img src=\"./picture/yolo3.png\" alt=\"Drawing\" style=\"width: 500px;\" align=\"left\"/>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "820ef247",
   "metadata": {},
   "source": [
    "这里讲述了yolo算法中的最后一步：\n",
    "\n",
    "1.前面讲述了要使用2个Anchor box也就是说每个格子都会有2个框，每个框都分别表示的是一个分类（也就是说这个格子会不会有两个检测对象）\n",
    "\n",
    "2.就像上面的一样使用非极大抑制选择$Pc$值最大的，删除$iou$比较大的即可。\n",
    "\n",
    "3.对于每个类别，分别对其使用非极大抑制，得出最终的答案。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "34646a29",
   "metadata": {},
   "source": [
    "上面的yolo算法是有一点不明白的，有点懵，后续多看点视频来理解，然后这个星期开始检测的项目实战。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4a8d48bf",
   "metadata": {},
   "source": [
    "# 候选区域"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "790a10e2",
   "metadata": {},
   "source": [
    "在计算机视觉领域内，会有一个名词叫做候选区域"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6eaf47af",
   "metadata": {},
   "source": [
    "<img src=\"./picture/rcnn.png\" alt=\"Drawing\" style=\"width: 500px;\" align=\"left\"/>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c6de0c90",
   "metadata": {},
   "source": [
    "这里的候选区域其实就是R-CNN算法，本质上就是选择区域使用CNN算法。\n",
    "\n",
    "例如上面的图片，你可以把不同的色块都放进你的CNN分类器里面\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9f57b5cc",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
